﻿using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using SharepointCommon;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Uportal.Shp.Core.Common;
using Uportal.Shp.Core.Const;
using Uportal.Shp.Core.Services;
using Uportal.Shp.UI.Common;

namespace Uportal.Shp.UI.TJ
{
    class ReminderFeedBackTJ : SPJobDefinition
    {
        NLogLogger _logger = new NLogLogger(@"c:\Temp\Logs\Uportal.ER_${shortdate}.log");

        public override string Description
        {
            get
            {
                return CustomDescription;
            }
        }

        private string CustomDescription { get; set; }

        #region _Constructors_
        public ReminderFeedBackTJ()
        {
        }

        public ReminderFeedBackTJ(string jobName, SPService service, SPServer server, SPJobLockType targetType)
            : base(jobName, service, server, targetType)
        {
        }

        public ReminderFeedBackTJ(string jobName, SPWebApplication webApplication)
            : base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
        {
            this.Title = "Uportal.ReminderFeedBack";
            this.CustomDescription = "Отчет модератору о неотвеченных вопросах.";
            var shedule = new SPWeeklySchedule()
                              {
                                  BeginDayOfWeek = DayOfWeek.Monday,
                                  BeginHour = 5,
                                  BeginMinute = 0,
                                  BeginSecond = 11,

                                  EndDayOfWeek = DayOfWeek.Monday,
                                  EndHour = 6,
                                  EndMinute = 0,
                                  EndSecond = 12
                              };
            this.Schedule = shedule;
        }

        public override void Execute(System.Guid targetInstanceId)
        {
            base.Execute(targetInstanceId);
            SPSecurity.RunWithElevatedPrivileges(RunReport);
        }
        #endregion

        public void RunReport()
        {
            string bodyBegin = @"<table> <tr><td></td></tr>";
            string bodyFinish = @"</table>";
            string bodyRow = @"<tr  bgcolor='#ffffff' valign=top align=left><td>{0}</td></tr>";
            string body = string.Empty;

            string messageToModerator = @"Привет Тебе!<br/>
                                            Портал Юлмарт напоминает тебе, что на эти вопросы, руководители не ответили, свяжись с ними и напомни :<br/>";
            string messageToManager = @"Доброе время суток!<br>
                                            Напоминаем Вам, что у вас есть не отвеченный {0} в на портале в разделе «Связь с руководством» <br/>
                                            Просим вас уделить немного своего времени и ответить сотруднику на вопрос.<br/>
                                            Если у вас нет возможности, времени или возникают технические трудности, просим вас сообщить об этом по почте uportal@ulmart.ru<br/><br/>
                                            Спасибо за участие!";

            using (var feedback = new FeedbackManager())
            {
                var items = feedback.GetReport();
                if (items != null)
                    foreach (SPListItem item in items)
                    {
                        var itemUrl = @"<a href='" + feedback.GetFormFullUrl(item, PAGETYPE.PAGE_EDITFORM) + "'>вопрос</a><br/>";
                        body += string.Format(bodyRow, itemUrl);
                    }
                else
                {
                    bodyBegin = string.Empty;
                    bodyFinish = string.Empty;
                    body = "Вопросов без ответа нет";
                }
                //говно код,сука,никогда не умрет!!! вынести в feedback manager
                if (items != null)
                {
                    string subj = "У вас есть неотвеченный вопрос";
                    using (var w = WebFactory.Open(Settings.Get().WebUrl))
                    {
                        foreach (SPListItem item in items)
                        {
                            var fieldGuid = item.Fields.GetField(FieldInfo.Feedback.Whom).Id;
                            var fieldManager = (SPFieldUser)item.Fields[fieldGuid];
                            var manager = (SPFieldUserValue)fieldManager.GetFieldValue(item[FieldInfo.Feedback.Whom].ToString());
                            var itemUrl = @"<a href='" + feedback.GetFormFullUrl(item, PAGETYPE.PAGE_EDITFORM) + "'>вопрос</a><br/>";
                            var message =string.Format(messageToManager, itemUrl);
                            _logger.Info(message);
                            

                            MailHelper.SendEmail(w.Web, manager.User.Email, subj, message);
                        }
                    }
                }
            }

            //получаем пользователей в группе "Модератор"и отправляем им письмо
            using (var w = WebFactory.Open(Settings.Get().WebUrl))
            {
                SPGroup group = w.Web.Groups[Settings.Get().ModeratorGroup];
                string subj = "Отчет об не ответивших вопросов";
                foreach (SPUser user in group.Users)
                {
                    MailHelper.SendEmail(w.Web, user.Email, subj, messageToModerator + bodyBegin + body + bodyFinish);
                }
            }

        }
    }
}
